package com.itheima.web.controller;

import com.itheima.domain.User;
import com.itheima.factory.BeanFactory;
import com.itheima.service.ModuleService;
import com.itheima.service.UserService;
import org.apache.commons.lang3.StringUtils;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;


@WebServlet("/authentication/*")
public class AuthenticationServlet extends BaseServlet {
    //获取service对象
    UserService userService = BeanFactory.getBean("userService", UserService.class);

    ModuleService moduleService = BeanFactory.getBean("moduleService", ModuleService.class);

    //处理用户登录的请求
    private void login(HttpServletRequest request, HttpServletResponse response){
        try {
            //1.获取请求参数邮箱和密码
            String email = request.getParameter("email");
            String password = request.getParameter("password");
            //2.调用service方法,获取用户信息
            User user = userService.login(email,password);
            //3.根据返回的结果判断
            if(user!=null){
                //4.登陆成功,做出响应
                //保存用户信息到session中,响应结果
                request.getSession().setAttribute("user",user);
                /*对于我们的系统来说，我们已经做了登录验证。所以后台查询类的方法只要登录成功就可以方法，
                对于增、删、改等涉及到更新数据库中数据的方法，我们就需要进行权限验证，如果有对应的权限，我们就让访问，
                如果没有对应的权限，我们不让访问*/
                //查询用户具有的操作权限,保存到session中,等待权限验证
                List<String> curls = moduleService.findPermissionByUserId(user.getId());
                request.getSession().setAttribute("curls",curls);

                /*response.sendRedirect(request.getContextPath()+"/pages/main.html");
                 这里如果服务器重启,我们在页面重新加载框架,会重新登录,但是登录页面会出现在带导航栏和侧边栏的框架页面中
                * 此时如果采用response.sendRedirect(request.getContextPath()+"/pages/main.html");的跳转方式会出现页面重复问题*/
                //解决:在AuthenticationFilter过滤器保存我们访问的路径,在用户登录成功后根据保存的路径跳转就行
                String sendRedirect =(String) request.getSession().getAttribute("sendRedirect");
                if(!StringUtils.isBlank(sendRedirect)){
                    response.sendRedirect(sendRedirect);
                }else{
                    response.sendRedirect(request.getContextPath()+"/pages/main.html");
                }
            }else{
                //5.如果登录失败,做出响应
                response.sendRedirect(request.getContextPath()+"/login.html");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //处理用户退出的请求
    private void logout(HttpServletRequest request, HttpServletResponse response) throws IOException {
        //销毁session
        request.getSession().invalidate();
        //重定向到登录页面
        response.sendRedirect(request.getContextPath()+"/login.html");
    }
}
